// pages/cart/cart.js
const db = wx.cloud.database()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    cartItems: [],
    totalPrice: 0,
    allSelected: true,
    loading: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.loadCartItems()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.loadCartItems()
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.loadCartItems(() => {
      wx.stopPullDownRefresh()
    })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 加载购物车数据
  loadCartItems(callback) {
    this.setData({ loading: true })
    
    try {
      const cartItems = wx.getStorageSync('cart') || []
      this.setData({
        cartItems: cartItems,
        loading: false
      }, () => {
        this.calculateTotal()
      })
      if (callback) callback()
    } catch (err) {
      console.error('获取购物车数据失败：', err)
      wx.showToast({
        title: '加载失败',
        icon: 'error'
      })
      this.setData({ loading: false })
      if (callback) callback()
    }
  },

  // 切换商品选中状态
  toggleItemSelect(e) {
    const { index } = e.currentTarget.dataset
    const { cartItems } = this.data
    const newItems = [...cartItems]
    newItems[index].selected = !newItems[index].selected
    
    this.setData({
      cartItems: newItems
    }, () => {
      this.calculateTotal()
      this.saveCartItems(newItems)
    })
  },

  // 切换全选状态
  toggleSelectAll() {
    const { cartItems, allSelected } = this.data
    const newItems = cartItems.map(item => ({
      ...item,
      selected: !allSelected
    }))
    
    this.setData({
      cartItems: newItems,
      allSelected: !allSelected
    }, () => {
      this.calculateTotal()
      this.saveCartItems(newItems)
    })
  },

  // 更新商品数量
  updateQuantity(e) {
    const { index, type } = e.currentTarget.dataset
    const { cartItems } = this.data
    const newItems = [...cartItems]
    const item = newItems[index]
    
    if (type === 'minus' && item.num > 1) {
      item.num--
    } else if (type === 'plus') {
      item.num++
    }
    
    this.setData({
      cartItems: newItems
    }, () => {
      this.calculateTotal()
      this.saveCartItems(newItems)
    })
  },

  // 删除商品
  deleteItem(e) {
    const { index } = e.currentTarget.dataset
    const { cartItems } = this.data
    
    wx.showModal({
      title: '提示',
      content: '确定要删除这个商品吗？',
      success: res => {
        if (res.confirm) {
          const newItems = cartItems.filter((_, i) => i !== index)
          this.setData({
            cartItems: newItems
          }, () => {
            this.calculateTotal()
            this.saveCartItems(newItems)
          })
        }
      }
    })
  },

  // 保存购物车数据到本地存储
  saveCartItems(items) {
    try {
      wx.setStorageSync('cart', items)
    } catch (err) {
      console.error('保存购物车数据失败：', err)
      wx.showToast({
        title: '保存失败',
        icon: 'error'
      })
    }
  },

  // 计算总价
  calculateTotal() {
    const { cartItems } = this.data
    const total = cartItems.reduce((sum, item) => {
      if (item.selected) {
        return sum + item.price * item.num
      }
      return sum
    }, 0)
    
    this.setData({
      totalPrice: total
    })
  },

  // 结算
  checkout() {
    // 检查用户是否登录
    const userInfo = wx.getStorageSync('userInfo')
    if (!userInfo || !userInfo.nickName) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      setTimeout(() => {
        wx.switchTab({ url: '/pages/user/user' })
      }, 1000)
      return
    }
    const { cartItems } = this.data
    const selectedItems = cartItems.filter(item => item.selected)
    
    if (selectedItems.length === 0) {
      wx.showToast({
        title: '请选择商品',
        icon: 'none'
      })
      return
    }
    
    // 先创建订单
    wx.showLoading({
      title: '创建订单中...'
    })
    
    // 计算总价
    const totalAmount = selectedItems.reduce((sum, item) => {
      return sum + item.price * item.num
    }, 0)
    
    // 计算运费（满99包邮）
    const shippingFee = totalAmount >= 99 ? 0 : 10
    
    wx.cloud.callFunction({
      name: 'createOrder',
      data: {
        goods: selectedItems,
        totalAmount: totalAmount + shippingFee,
        shippingFee: shippingFee,
        remark: ''
      },
      success: res => {
        wx.hideLoading()
        
        if (res.result.success) {
          // 跳转到支付页面并传递订单信息
          wx.navigateTo({
            url: `/pages/payment/payment?orderId=${res.result.orderId}&orderNo=${res.result.orderNo}`
          })
        } else {
          wx.showToast({
            title: res.result.message || '创建订单失败',
            icon: 'none'
          })
        }
      },
      fail: err => {
        wx.hideLoading()
        console.error('创建订单失败：', err)
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        })
      }
    })
  }
})